package com.marver.common.dao;

import java.util.List;
import java.util.Map;

import com.marver.common.result.Result;
import org.springframework.dao.DataAccessException;


public interface BaseDAO {
    /** 
     * 新增 
     * @param statementName  
     * @param obj 
     * @throws DataAccessException 
     */  
    void addBySqlMap(String statementName, Object obj) throws DataAccessException;
    
    /**
     * 批量新增
     * @param <T>
     * @param statementName
     * @param obj
     * @throws DataAccessException
     */
	<T> void batchAddBySqlMap(String statementName, List<T> obj) throws DataAccessException;
	
    /** 
     * 新增 
     * @param statementName  
     * @param obj 
     * @throws DataAccessException 
     */  
    void addBySqlMap(String statementName, Map<String, Object> map) throws DataAccessException; 

    /** 
     * 删除满足条件的所有记录 
     * @param statementName 
     * @param map 条件map 
     * @return 
     * @throws DataAccessException 
     */  
    int deleteBySqlMap(String statementName, Map<String, Object> map) throws DataAccessException;

    /**
     * 删除满足条件的所有记录
     * @param statementName
     * @param obj 条件obj
     * @return
     * @throws DataAccessException
     */
    int deleteBySqlMap(String statementName, Object obj) throws DataAccessException;


    /**
     * 更新对象
     * @param statementName
     * @param obj 要更新的对象
     * @return
     * @throws DataAccessException
     */
    int updateBySqlMap(String statementName, Object obj) throws DataAccessException;

    /**
     * 更新对象
     * @param statementName
     * @param map
     * @return
     * @throws DataAccessException
     */
    int updateBySqlMap(String statementName, Map<String, Object> map) throws DataAccessException;

    
    /** 
     * 查找符合条件的对象 
     * @param statementName 
     * @param map 过滤条件map 
     * @return 
     */  
    Object findObjectBySqlMap(String statementName, Map<String, Object> map);  

    /** 
     * 查找符合条件的对象 
     * @param statementName 
     * @param obj 过滤条件obj
     * @return 
     */  
    Object findObjectBySqlMap(String statementName, Object obj); 

    /** 
     *分页查询满足给定条件的对象列表  
     * @param statementName 
     * @param map 过滤条件map 
     * @param skipResults 跳过的记录 
     * @param pageSize 一页的记录条数 
     * @return 
     */  
    List listByPageBySqlMap(String statementName, Map<String, Object> map, int skipResults, int pageSize);

    /** 
     *分页查询满足给定条件的对象列表  
     * @param statementName 
     * @param obj 过滤条件obj 
     * @param skipResults 跳过的记录 
     * @param pageSize 一页的记录条数 
     * @return 
     */  
    List listByPageBySqlMap(String statementName, Object obj, int skipResults, int pageSize);

    /**
     *分页查询满足给定条件的对象列表
     * @param statementName
     * @param obj 过滤条件obj,需包含pageNum/pageSize两个参数
     * @return
     */
    Result listByPageBySqlMap(String statementName, Object obj);

    /** 
     * 查询所有满足给定条件的对象列表  
     * @param statementName 
     * @param map 过滤条件map 
     * @return 
     */  
    List listBySqlMap(String statementName, Map<String, Object> map);  
    
    /** 
     * 查询所有满足给定条件的对象列表  
     * @param statementName 
     * @param obj 过滤条件obj 
     * @return 
     */  
    List listBySqlMap(String statementName, Object obj);
}
